import java.util.Arrays;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-10-08
 * Time:15:40
 */

/**
 * 力扣870:优势洗牌
 */

public class advantageCount {
    public static void main(String[] args) {
        int[] nums1 = {2,7,11,15};
        int[] nums2 = {1,10,4,11};
        System.out.println(advantageCount(nums1, nums2));
    }
    public static int[] advantageCount(int[] nums1, int[] nums2) {
        //直接对nums2本体进行操作
        int n = nums1.length;
        Integer[] idx = new Integer[n]; // nums2索引
        for (int i = 0; i < n; i++) {
            idx[i] = i;
        }

        Arrays.sort(nums1);
        //根据nums2数据升序，排序idx
        Arrays.sort(idx, (i, j) -> nums2[i] - nums2[j]);

        int L = 0, R = n - 1; // nums2(索引)的左右指针
        for (int i : nums1) { // 遍历nums1

            //nums1从小到大,和nums2同样从小到大进行比较
            //因为我们是直接对nums2的本体进行操作,所以我们就不对nums2进行直接的sort操作,而是对其下标进行sort操作
            if (i > nums2[idx[L]]) {
                //i相当于就是nums1中的值
                //当i>nums2的值时直接赋值给nums2
                nums2[idx[L++]] = i; // 可以满足 nums1[i] > nums2[i]
            } else {
                nums2[idx[R--]] = i; //丢到数组最后
            }
        }
        return nums2;
    }
}
